Page({
  data: {
    cartItems: [],
    dishes: [], // 菜品列表
    cartCount: 0, // 购物车商品数量
    isLoggedIn: false, // 登录状态
    page: 1, // 当前页码
    pageSize: 20, // 每页显示的菜品数量
    hasMore: true, // 是否还有更多数据
    searchKeyword: '' // 搜索关键字
  },

  // 页面加载时触发
  onLoad: function () {
    wx.showModal({ 
      title: '温馨提示', 
      content: '授权微信登录后才能点餐！', 
      confirmText: '确定', 
      cancelText: '取消', 
      success: (res) => { 
        if (res.confirm) { 
          // 用户点击确定，调用微信登录 
          this.wxLogin(); 
        } else if (res.cancel) { 
          // 用户点击取消，提示用户需要授权 
          wx.showToast({ 
            title: '需要授权才能继续使用', 
            icon: 'none' 
          }); 
        } 
      } 
    }); 
  }, 
  // 新增生命周期函数
  onShow: function() {
    if (this.data.isLoggedIn) {
      this.getCartCount();
    }
  },

 
  // 微信登录 
  wxLogin: function() { 
    // 获取微信登录 code 
    wx.login({ 
      success: (res) => { 
        const code = res.code; // 获取 code 
        if (code) { 
          // 将 code 发送到后端 
          this.sendCodeToBackend(code); 
        } else { 
          wx.showToast({ 
            title: '登录失败，请重试', 
            icon: 'none' 
          }); 
        } 
      }, 
      fail: (err) => { 
        console.error('获取 code 失败:', err); 
        wx.showToast({ 
          title: '登录失败，请重试', 
          icon: 'none' 
        }); 
      } 
    }); 
  }, 
 
  // 将 code 发送到后端 
  sendCodeToBackend: function(code) { 
    wx.request({ 
      url: 'http://localhost:8080/manage/user/login', // 替换为你的后端接口地址 
      method: 'POST', 
      data: { 
        code: code 
      }, 
      success: (res) => { 
        if (res.statusCode === 200) { 
          const userInfo = res.data.data; 
          const app = getApp(); 
          // 保存用户信息到全局变量 
          app.globalData.userInfo = userInfo; 
          // 更新页面数据 
          this.setData({ 
            isLoggedIn: true, 
            userInfo: userInfo
          }); 
          wx.showToast({ 
            title: '登录成功', 
            icon: 'success' 
          }); 
          // 初始化加载第一页数据
          this.fetchDishes();
          this.getCartCount();
        } else { 
          wx.showToast({ 
            title: '登录失败，请重试', 
            icon: 'none' 
          }); 
        } 
      }, 
      fail: (err) => { 
        console.error('请求后端失败:', err); 
        wx.showToast({ 
          title: '登录失败，请重试', 
          icon: 'none' 
        }); 
      } 
    }); 
  },

  // 监听搜索框输入
  onSearchInput: function (event) {
    this.setData({
      searchKeyword: event.detail.value // 获取用户输入的关键字
    });
  },

  // 点击搜索按钮
  onSearch: function () {
    this.setData({
      page: 1, // 重置页码
      dishes: [], // 清空当前菜品列表
      hasMore: true // 重置是否有更多数据
    });
    this.searchDishes(); // 调用新的搜索方法
  },

  // 获取菜品数据
  fetchDishes: function () {
    const { page, pageSize } = this.data;

    wx.request({
      url: 'http://localhost:8080/manage/dish/list', // 后端接口地址
      method: 'GET',
      data: {
        page: page,
        pageSize: pageSize,
        status: 1
      },
      success: (res) => {
        console.log(res);
        if (res.statusCode === 200) {
          const newDishes = res.data.rows.map((item, index) => ({
            id: item.id || index, // 如果 id 可能为空，使用索引作为备用
            image: item.image,
            name: item.name,
            description: item.description,
            price: item.price
          }));

          this.setData({
            dishes: this.data.dishes.concat(newDishes), // 将新数据追加到现有数据中
            hasMore: newDishes.length === pageSize // 判断是否还有更多数据
          });
        } else {
          wx.showToast({
            title: '获取菜品数据失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('请求菜品数据失败:', err);
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 搜索菜品数据
  searchDishes: function () {
    const { page, pageSize, searchKeyword } = this.data;

    wx.request({
      url: 'http://localhost:8080/manage/dish/search', // 新增的搜索接口地址
      method: 'GET',
      data: {
        page: page,
        pageSize: pageSize,
        status: 1,
        keyword: searchKeyword // 传递搜索关键字
      },
      success: (res) => {
        console.log(res);
        if (res.statusCode === 200) {
          const newDishes = res.data.rows.map((item, index) => ({
            id: item.id || index, // 如果 id 可能为空，使用索引作为备用
            image: item.image,
            name: item.name,
            description: item.description,
            price: item.price
          }));

          this.setData({
            dishes: this.data.dishes.concat(newDishes), // 将新数据追加到现有数据中
            hasMore: newDishes.length === pageSize // 判断是否还有更多数据
          });
        } else {
          wx.showToast({
            title: '搜索菜品数据失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('请求搜索菜品数据失败:', err);
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 加载更多数据
  loadMore: function () {
    if (this.data.hasMore) {
      this.setData({
        page: this.data.page + 1
      });
      if (this.data.searchKeyword) {
        this.searchDishes(); // 如果是搜索状态，调用搜索方法
      } else {
        this.fetchDishes(); // 否则调用普通加载方法
      }
    }
  },

  // 加入购物车
  addToCart: function(event) {
    const dishId = event.currentTarget.dataset.id;
    const app = getApp();
    const userId = app.globalData.userInfo.id;
    const dish = this.data.dishes.find((item) => item.id === dishId);
    const cart = this.data.cartItems.find((item) => item.dishid === dish.id);
    if(cart)
    {
      wx.request({
        url: 'http://localhost:8080/manage/cart',
        method: "PUT",
        data: {
          id : cart.id,
          userId: userId,
          dishId: dishId,
          name: dish.name,
          image: dish.image,
          number: cart?.quantity + 1,
          amount: dish.price
        },
        success: (res) => {
          if (res.data.code === 200) {
            wx.showToast({ title: '已加入购物车', icon: 'success' });
            this.getCartCount();
          } else {
            wx.showToast({ title: '添加失败', icon: 'none' });
          }
        },
        fail: () => {
          wx.showToast({ title: '网络错误', icon: 'none' });
        }
      });
    }
    else{
      wx.request({
        url: 'http://localhost:8080/manage/cart',
        method: "POST",
        data: {
          userId: userId,
          dishId: dishId,
          name: dish.name,
          image: dish.image,
          number: 1 ,
          amount: dish.price
        },
        success: (res) => {
          if (res.data.code === 200) {
            wx.showToast({ title: '已加入购物车', icon: 'success' });
            this.getCartCount();
          } else {
            wx.showToast({ title: '添加失败', icon: 'none' });
          }
        },
        fail: () => {
          wx.showToast({ title: '网络错误', icon: 'none' });
        }
      });
    }
  },

  // 新增获取购物车数量方法
  getCartCount: function() {
    const app = getApp();
    const userId = app.globalData.userInfo.id;
    wx.request({
      url: 'http://localhost:8080/manage/cart/list',
      method: 'GET',
      data: {
        userId: userId,
        pageSize: 1000
      },
      success: (res) => {
        if (res.data.code === 200) {
          // 计算购物车商品总数
          const total = res.data.rows.reduce((sum, item) => sum + item.number, 0);
          const { rows } = res.data;
          const formattedCart = rows.map(item => ({
            id: item.id,
            name: item.name,
            image: item.image,
            price: item.amount,
            quantity: item.number,
            dishid: item.dishId
          }));
          console.log(formattedCart);
          this.setData({
            cartItems: formattedCart, 
            cartCount: total 
          });
        }
      },
      fail: (err) => {
        console.error('获取购物车数量失败:', err);
      }
    });
  },

  goToCart() {
    console.log('尝试跳转到购物车页面');  // 查看控制台是否输出
    wx.switchTab({
      url: '/pages/cart/cart',
      fail: (err) => {
        console.error('跳转失败:', err);  // 捕获错误信息
      }
    });
  },
});